内网穿透 ngork

什么是内网穿透?

通俗解释

想象你的电脑是一个“酒店房间”(内网 IP,如 127.0.0.1 192.168.x.x),而互联网是“街道”。

  • 别人在街道上(公网)是找不到你的房间号的,因为很多酒店都有“201房”。
  • 内网穿透 就像是雇了一个“接线员”(ngrok 服务器)。
  • 接线员在街道上设了一个“服务台”(公网 URL),别人只要访问这个服务台,接线员就会把信号通过一条“专用电话线”(隧道)直接转接到你的房间里。

核心作用

让外网(互联网)用户能够访问你本地电脑上运行的服务(如网站、数据库、SSH 等),而无需购买服务器或配置复杂的路由器端口转发。

ngrok 快速上手

ngrok 是目前最流行的反向代理工具,它能通过一条命令瞬间建立隧道。

第一步:安装与配置

下载:去 ngrok官网 下载对应的版本(Windows/Mac/Linux)。

2-Learning/03-项目筑基/05-网络与项目/02-局域网与内网穿透/assets/image-65748feb

解压:解压后得到一个可执行文件 ngrok (Windows下是 ngrok.exe)。

2-Learning/03-项目筑基/05-网络与项目/02-局域网与内网穿透/assets/image-547695d2

认证(必须):

注册并登录 ngrok dashboard。

https://dashboard.ngrok.com/get-started/your-authtoken

复制你的 Authtoken

2-Learning/03-项目筑基/05-网络与项目/02-局域网与内网穿透/assets/image-07148ca4

在终端(cmd/PowerShell)运行:

ngrok config add-authtoken <你的Token>

第二步:常用命令速查

暴露 Web 服务 (HTTP)

这是最常用的功能,将本地网站通过公网访问。

  • 默认 80 端口:

    ngrok http 80
    
  • 指定其他端口 (例如 3000):

    ngrok http 3000
    
    2-Learning/03-项目筑基/05-网络与项目/02-局域网与内网穿透/assets/image-45ace144
  • 指定地区 (加速连接): 如果你在亚洲,建议加上 --region=ap (Asia Pacific):

    ngrok http 80 --region=ap
    

暴露 TCP 服务 (SSH/远程桌面)

如果你需要远程连接数据库、SSH 或 Windows 远程桌面 (RDP)。

  • 暴露 SSH (默认 22):

    ngrok tcp 22
    
  • 暴露 远程桌面 (默认 3389):

    ngrok tcp 3389
    

    注意:TCP 隧道在免费版中会随机分配一个端口号,例如 0.tcp.ap.ngrok.io:12345

进阶技巧与常见坑

重点 1:路径问题 (Route vs Path)

ngrok 只负责打通端口,不负责跳转路径

  • 错误理解:我想直接穿透到 /share/index,所以输入 ngrok http 8080/share/index ❌ (命令会报错)。
  • 正确做法
    1. 运行 ngrok http 8080
    2. 得到公网地址 https://abcd.ngrok-free.app
    3. 手动在浏览器访问 https://abcd.ngrok-free.app/share/index

重点 2:Host Header (网页报错 Invalid Host)

有些本地服务(如 Vue/React 开发服、WordPress)会检查请求的 Host 头,发现是 ngrok 的域名就会拒绝连接。

  • 解决方案:使用重写 Host 参数。

    ngrok http 8080 --host-header="rewrite"
    

    这会让你的本地程序以为请求是直接来自 localhost,从而允许访问。

重点 3:流量监控 (Web Interface)

ngrok 启动后,不要关闭终端。你可以在浏览器打开以下地址进入管理面板

http://127.0.0.1:4040

  • Inspect:查看所有经过隧道的请求(Request)和响应(Response)的详细内容,非常适合调试 API 回调(Webhook)。
  • Status:查看当前隧道的连接状态。

免费版要知道的几件事

  • 公网地址每次启动都会变:上次是 abcd.ngrok-free.app 这次可能就是 efgh... 想固定域名要付费或绑定自己的域名——临时演示无所谓 长期挂着就得另想办法
  • 陌生人打开链接会先撞到警告页:免费版有个拦截页 浏览器第一次访问要手动点一下 "Visit Site" 才放行 所以分享给别人调试时提醒对方点一下(核对点:这是免费版行为 付费版没有)
  • 免费隧道有连接数/带宽限制:自己调试够用 拿来跑正经服务就不行了 具体额度官网 pricing 时常调整 以官网为准

它和 Cloudflare Tunnel 什么关系

思路一模一样 都是"雇接线员" 区别在雇的是谁:

  • ngrok:现成的服务 一条命令就通 适合临时演示和调试 但免费版地址会变 速度也一般
  • Cloudflare Tunnel:接线员换成 Cloudflare 隧道挂在自己的域名上 客户端叫 cloudflared "再次出发"主线里已经实操过(快速建站那套就是它)详见Cloudflare Tunnel
  • FRP:连接线员都自己当——在自己的VPS上跑一个frps当服务台 本地跑frpc连上去 完全自主可控 就是要有台有公网IP的服务器(见再次出发的VPS线)

一句话:偶尔用用选ngrok 长期服务选Tunnel 有VPS想全权掌控选FRP

环境变量配置 (Windows)

为了避免每次都要 cd 到下载目录才能运行 ngrok:

  1. ngrok.exe 移动到一个固定目录(例如 C:\Program Files\ngrok\)。
  2. 搜索 Windows 设置 -> “编辑系统环境变量”
  3. 点击 “环境变量” -> 在 “系统变量” 中找到 Path -> 点击 “编辑”
  4. 点击 “新建” -> 粘贴你存放 ngrok 的文件夹路径。
  5. 重启终端,现在你在任何地方输入 ngrok 都可以运行了。

⬅️ MC指令 🏠 00-网络与项目 ➡️ FRP 自建内网穿透